جزوه · فصل نهم · جلسه 86 · اعمال ریاضی در خط فرمان ← بازگشت به فهرست
📘 فصل نهم · جلسه 86 اعمال ریاضی در خط فرمان
📅 تاریخ: پنجشنبه، ۴ شهریور ۱۴۰۵ 👤 مدرس: محمد عابدینی 🐚 Zsh · 🐧 Debian (کالی) · 📦 Red Hat
این جلسه یکی از مباحث کاربردی در اسکریپت‌نویسی است. نحوه انجام محاسبات ریاضی با $[] و bc در آزمون‌های عملی بسیار پرتکرار است.
🧮 قبل از شروع، یه مثال ساده:

فرض کن می‌خوای تو یه ماشین حساب یه سری عملیات ریاضی انجام بدی. توی لینوکس، دو تا راه داری: یکی برای اعداد صحیح (مثل ۵، ۱۰، ۲۰-) و یکی برای اعداد اعشاری (مثل ۳.۱۴، ۲.۵). این جلسه بهت یاد میده چطور هر دو نوع محاسبه رو انجام بدی!

▍ روش‌های انجام محاسبات ریاضی در Bash

در Bash دو روش اصلی برای انجام محاسبات ریاضی وجود دارد:

🔵 روش اول: $[ ]

  • مناسب برای اعداد صحیح (Integer).
  • سریع و ساده.
  • از عملگرهای +، -، *، /، ** پشتیبانی می‌کند.
  • مثال: result=$[ 25 * 5 ]

🟢 روش دوم: bc

  • مناسب برای اعداد اعشاری (Floating-point).
  • یک ماشین حساب کامل در ترمینال.
  • با scale تعداد ارقام اعشار را کنترل می‌کند.
  • مثال: echo "scale=4; 3.44 / 5" | bc

▍ روش اول: محاسبات با اعداد صحیح ($[ ])

برای انجام محاسبات ساده روی اعداد صحیح از براکت $[ ] استفاده می‌شود. این روش در Bash بسیار رایج و کارآمد است.

• عملگرهای پشتیبانی‌شده

عملگر معنی مثال
+ جمع $[ 10 + 5 ] → ۱۵
- تفریق $[ 10 - 5 ] → ۵
* ضرب $[ 10 * 5 ] → ۵۰
/ تقسیم $[ 10 / 3 ] → ۳ (بخش صحیح)
** توان $[ 2 ** 3 ] → ۸
% باقیمانده (Modulo) $[ 10 % 3 ] → ۱

• مثال‌های عملی

┌──(ya3in㉿kali)-[~] └─$ result=$[ 25 * 5 ] └─$ echo $result 125

توضیح: 25 * 5 محاسبه شده و نتیجه در متغیر result ذخیره شده است.

┌──(ya3in㉿kali)-[~] └─$ result=$[ 25 + 5 ] └─$ echo $result 30

توضیح: 25 + 5 محاسبه شده و نتیجه در متغیر result ذخیره شده است.

┌──(ya3in㉿kali)-[~] └─$ result=$[ 2 ** 5 ] └─$ echo $result 32

توضیح: 2 ** 5 یعنی ۲ به توان ۵ که می‌شود ۳۲.

نکته: $[ ] فقط با اعداد صحیح کار می‌کند. اگر از اعداد اعشاری استفاده کنید، خطا می‌دهد.
⚠️ توجه: در $[ ] بین عملگرها و اعداد فاصله مجاز است (برخلاف تعریف متغیر که فاصله ممنوع است).

• استفاده از متغیرها در $[ ]

┌──(ya3in㉿kali)-[~] └─$ a=10 └─$ b=20 └─$ result=$[ a + b ] └─$ echo $result 30

توضیح: می‌توانید از نام متغیرها (بدون $) داخل $[ ] استفاده کنید.

┌──(ya3in㉿kali)-[~] └─$ result=$[ $a * $b ] └─$ echo $result 200

توضیح: می‌توانید با $ هم از متغیرها استفاده کنید (هر دو روش مجاز است).

▍ روش دوم: محاسبات با اعداد اعشاری (bc)

bc (مخفف Basic Calculator) یک ماشین حساب کامل در ترمینال است که از اعداد اعشاری، عملیات پیشرفته و اسکریپت‌نویسی پشتیبانی می‌کند.

🔑 نکته کلیدی: bc برای محاسبات با دقت بالا و اعداد اعشاری استفاده می‌شود. با scale تعداد ارقام اعشار را مشخص می‌کنیم.

• استفاده از bc در خط فرمان

┌──(ya3in㉿kali)-[~] └─$ bc # محیط bc باز می‌شود 3.44 / 5 0 # بدون scale فقط قسمت صحیح را نشان می‌دهد scale=4 3.44 / 5 .6880 quit

توضیح: bc یک محیط تعاملی است. با scale=4 تعداد ارقام اعشار را ۴ قرار می‌دهیم.

• استفاده از bc در یک خط (با Pipe)

┌──(ya3in㉿kali)-[~] └─$ echo "scale=4; 3.44 / 5" | bc .6880

توضیح: با | (Pipe) عبارت را به bc می‌دهیم و نتیجه را دریافت می‌کنیم.

• ذخیره نتیجه در متغیر

┌──(ya3in㉿kali)-[~] └─$ result=$(echo "scale=4; 3.44 / 5" | bc) └─$ echo $result .6880

توضیح: خروجی bc در متغیر result ذخیره شده است.

نکته امتحانی: برای محاسبات اعشاری در Bash، حتماً از bc استفاده کنید. $[ ] فقط برای اعداد صحیح کار می‌کند.

• مثال‌های پیشرفته با bc

┌──(ya3in㉿kali)-[~] └─$ echo "scale=2; 10 / 3" | bc 3.33
┌──(ya3in㉿kali)-[~] └─$ echo "scale=4; sqrt(25)" | bc -l 5.0000

توضیح: با گزینه -l کتابخانه ریاضی فعال می‌شود و توابعی مانند sqrt() در دسترس هستند.

┌──(ya3in㉿kali)-[~] └─$ echo "scale=2; 3.44 * 5.2 + 1.8" | bc 19.68

• ترکیب bc با متغیرها

┌──(ya3in㉿kali)-[~] └─$ num1=3.44 └─$ num2=5 └─$ result=$(echo "scale=4; $num1 / $num2" | bc) └─$ echo $result .6880

▍ جمع‌بندی و مقایسه

ویژگی $[ ] bc
اعداد صحیح ✅ بله ✅ بله
اعداد اعشاری ❌ خیر ✅ بله
سرعت ⚡ سریع 🐢 کمی کندتر
توابع ریاضی (sqrt, sin, ...) ❌ خیر ✅ بله (با -l)
کنترل دقت اعشار ❌ خیر ✅ بله (با scale)
استفاده در اسکریپت ✅ بسیار راحت ✅ با $(...) راحت است
✅ جمع‌بندی نهایی:
  • $[ ] → برای محاسبات سریع با اعداد صحیح.
  • bc → برای محاسبات دقیق با اعداد اعشاری و توابع ریاضی.
  • scale → در bc تعداد ارقام اعشار را مشخص می‌کند.
  • -l → در bc کتابخانه ریاضی را فعال می‌کند.
  • Pipe (|) → برای ارسال عبارت به bc استفاده می‌شود.
📝 تمرین پیشنهادی:

یک اسکریپت بنویسید که:

  • از کاربر دو عدد اعشاری بگیرد.
  • جمع، تفریق، ضرب و تقسیم آنها را با bc محاسبه کند.
  • با scale=2 نتیجه را تا ۲ رقم اعشار نمایش دهد.
  • همچنین با $[ ] توان دوم (به توان ۲) هر دو عدد را محاسبه کند.